package vista;

import java.awt.*;
import javax.swing.*;
import modeloCarmenSanDiego.Ciudad;
import modeloCarmenSanDiego.Juego;
import controlador.*;

public class Ventana extends JFrame {
	
	private static final long serialVersionUID = 1L;
	private PanelCentral panelCentral;
	private PanelEste panelEste;
	private PanelOeste panelOeste;
	private PanelNorte panelNorte;
	private PanelSur panelSur;
	private Juego juego;
	
	public Ventana(Juego juego){
		super("Algo-Thief");
		this.juego = juego;
		setSize(800,600);
		setResizable(false);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setIconImage(new ImageIcon(getClass().getResource("/imagenes/132.jpg")).getImage());
		this.panelCentral = new PanelCentral(this);
		this.panelEste = new PanelEste(this);
		this.panelOeste = new PanelOeste(this);
		this.panelNorte = new PanelNorte(this);
		this.panelSur = new PanelSur(this);
		this.add(panelCentral, BorderLayout.CENTER);
		this.add(panelSur, BorderLayout.SOUTH);
		this.add(panelNorte, BorderLayout.NORTH);
		this.add(panelEste, BorderLayout.EAST);
		this.add(panelOeste, BorderLayout.WEST);
		this.cambiarVisibilidadAMenuPrincipal(); // comienza visible solo el menu.
	}
	
	public void mensajeInicio(){ 
		this.imprimirMensajeEnNuevaVentana("Tesoro nacional robado en: "+ juego.getPolicia().getCiudadActual().getNombre()
				+"\n El botin ha sido identificado como "+juego.getCaso().getObjetoRobado().getNombreDelObjeto() 
				+".\n\tUn sospechoso del sexo "+ juego.getCaso().getLadron().getPerfil().getSexo().getStringDePista() 
				+" ha sido visto en el lugar del crimen.\n\nTu mision: Perseguir al ladron hasta "
				+ "su escondite y arrestarlo.\n\nTienes que arrestar al ladron antes del domingo a las 17hs.\nBuena suerte Oficial");
	}
	
	public void setearJuego(Juego juego) {
		this.juego = juego;
	}
	
	private void cambiarVisibilidadAMenuPrincipal(){
		this.panelCentral.cambiarVisibilidadAMenuPrincipal();
		this.panelEste.cambiarVisibilidadAMenuPrincipal();
		this.panelOeste.cambiarVisibilidadAMenuPrincipal();
		this.panelSur.cambiarVisibilidadAMenuPrincipal();
		this.panelNorte.cambiarVisibilidadAMenuPrincipal();
	}

	public void cambiarVisibilidadAComisaria(){
		this.panelCentral.setOpaque(true);
		this.panelCentral.cambiarVisibilidadAComisaria();
		this.panelNorte.cambiarVisibilidadAComisaria();
		this.panelSur.cambiarVisibilidadAComisaria();
		this.panelEste.cambiarVisibilidadAComisaria();
		this.panelOeste.cambiarVisibilidadAComisaria();
	}
	
	public void cambiarVisibilidadACiudad() {
		this.panelEste.cambiarVisibilidadACiudad();
		this.panelNorte.cambiarVisibilidadACiudad();
		this.panelOeste.cambiarVisibilidadACiudad();
		this.panelSur.cambiarVisibilidadACiudad();
		this.panelCentral.cambiarVisibilidadACiudad();
	}

	public void cambiarVisibilidadADestinos() {
		this.panelEste.cambiarVisibilidadADestinos();
		this.panelNorte.cambiarVisibilidadADestinos();
		this.panelOeste.cambiarVisibilidadADestinos();
		this.panelSur.cambiarVisibilidadADestinos();
		this.panelCentral.cambiarVisibilidadADestinos();
	}
	
	public void actualizarReloj() {
		this.panelNorte.actualizarReloj(this.juego.getReloj().relojComoString());
	}

	public void actualizarCiudad() {
		this.panelNorte.actualizarCiudad((this.juego.getPolicia().getCiudadActual()).getNombre());
	}

	public void actualizarDestinos() {
		Ciudad ciudadActual = this.juego.getPolicia().getCiudadActual();
		this.panelCentral.actualizarDestinos(ciudadActual.getDestinos());
	}

	public void actualizarEdificios() {
		Ciudad ciudadActual = this.juego.getPolicia().getCiudadActual();
		this.panelCentral.actualizarEdificios(ciudadActual.getEdificios());
	}
	
	public void imprimirMensajeEnNuevaVentana(String string) {
		JOptionPane.showMessageDialog(null,string);
	}
	
	public void mostrarMensaje(String stringDePista) {
		this.panelSur.mostrarMensaje(stringDePista);
	}

	public void cerrarCaso(boolean estadoFinal) {
		if (estadoFinal == false){
			if (this.juego.getReloj().seTerminoElTiempo()){
				this.imprimirMensajeEnNuevaVentana("Se acabo el tiempo para atraparlo! Se te asignara un nuevo caso");
			}
			else{
				this.imprimirMensajeEnNuevaVentana("Ves al ladron en el edificio e intentas atraparlo... "
						+ "Llegaste al ladron sin la orden correcta! "
						+ "Ten mas cuidado la proxima vez. Se te asignara un nuevo caso.");	
			}
		}
		else {
			this.imprimirMensajeEnNuevaVentana("Lo atrapaste! Sigue asi! Se te asignara un nuevo caso.");
			if (this.juego.seAscendioDeGrado())
				this.imprimirMensajeEnNuevaVentana("Felicidades, has ascendido de grado.");
			
		}
		juego.crearCaso(); //cuando termina se crea otro caso
		this.actualizarVistaANuevoCaso();
	}
	
	public void actualizarDespuesDeViaje(){
		this.juego.mezclarDestinosPolicia();
		this.actualizarCiudad();
		this.actualizarDestinos();
		this.actualizarEdificios();
		this.actualizarReloj();
		this.cambiarVisibilidadACiudad();
		this.ultimaCiudad();
	}
	
	private void ultimaCiudad() {
		if (juego.policiaEnUltimaCiudad())
			this.imprimirMensajeEnNuevaVentana("Ten Cuidado, te estas acercando demasiado.");
	}

	public void actualizarVistaANuevoCaso(){
		this.actualizarCiudad();
		this.actualizarDestinos();
		this.actualizarReloj();
		this.actualizarEdificios();
		this.panelSur.cambiarVisibilidadACiudad();
		mensajeInicio();
	}
	
	public JRadioButton getBotonSeleccionadoCabello() {
		return this.panelOeste.getBotonSeleccionadoCabello();
	}

	public JRadioButton getBotonSeleccionadoHobby() {
		return this.panelOeste.getBotonSeleccionadoHobby();
	}
	
	public JRadioButton getBotonSeleccionadoSexo() {
		return this.panelOeste.getBotonSeleccionadoSexo();
	}
	
	public JRadioButton getBotonSeleccionadoVehiculo() {
		return this.panelOeste.getBotonSeleccionadoVehiculo();
	}
	
	public JRadioButton getBotonSeleccionadoSenia() {
		return this.panelOeste.getBotonSeleccionadoSenia();
	}
	
	
	
	
	// LISTENERS
	
	public void addBotonNuevoJListener(BotonNuevoJListener botonNuevoJ){
		this.panelCentral.addBotonNuevoJListener(botonNuevoJ);
	}
	
	public void addBotonCiudadListener(BotonCiudadListener botonCiudadListener) {
		this.panelEste.addBotonCiudadListener(botonCiudadListener);
	}
	
	public void addBotonDestinosListener(BotonDestinosListener botonDestinosListener) {
		this.panelEste.addBotonDestinosListener(botonDestinosListener);
	}
	
	public void addBotonComisariaListener(BotonComisariaListener botonComisariaListener){
		this.panelEste.addBotonComisariaListener(botonComisariaListener);
	}

	public void addBotonSalirListener(BotonSalirListener botonSalirListener) {
		this.panelCentral.addBotonSalirListener(botonSalirListener);
		this.panelEste.addBotonSalirListener(botonSalirListener);
	}
	
	public void addBotonEdificioListener() {
		this.panelCentral.addBotonEdificioListener(juego);
	}

	public void addBotonDestinoCiudadListener() {
		this.panelCentral.addBotonDestinoListener(juego);
	}
	
	public void addBotonGuadarListener(BotonGuardarListener botonGuardarListener) {
		this.panelNorte.addBotonGuardarJListener(botonGuardarListener);
	}
	
	public void addBotonCargarListener(BotonCargarListener botonCargarListener) {
		this.panelCentral.addBotonCargarListener(botonCargarListener);
	}
	
	public void addBotonEmitirOrdenListener(BotonEmitirOrdenListener botonEmitirOrdenListener){
		this.panelOeste.addEmitirOrdenListener(botonEmitirOrdenListener);
	}

}
